/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.lm.base.util;

import br.com.lm.entity.CtrlUsuario;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;

public class AutorizaListener implements PhaseListener {

    @Override
    public void afterPhase(PhaseEvent event) {
        CtrlUsuario usuarioAutenticado;
        // Obtém o contexto atual
        FacesContext contexto = event.getFacesContext();
        // Obtém a página que atualmente está interagindo com o ciclo
        String paginaAtual = contexto.getViewRoot().getViewId();        
        
        // Se for a página 'login.xhtml' seta a variável como true
        boolean isLoginPage = paginaAtual.lastIndexOf("login.xhtml") > -1;
        // Pagina para recuperar a senha
        boolean isRecupSenha = paginaAtual.lastIndexOf("recuperar_senha.xhtml") > -1;
        
        // Obtém a sessão atual
        HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);        
        // Resgata o nome do usuário logado
        try {
            usuarioAutenticado = (CtrlUsuario) sessao.getAttribute("usuarioAutenticado");
        } catch (Exception ex) {
           usuarioAutenticado = null;
        }
        
        //Obtem dados de sessao se não for controle de senha
        if (!isLoginPage && !isRecupSenha ) {
            
            // Não houve autenticação ou expirou a sessão redireciona tela 
            if (usuarioAutenticado == null) {
                //Chama a página de login
                FacesContext faces = FacesContext.getCurrentInstance();
                ExternalContext context = faces.getExternalContext();
                //NavigationHandler nh = contexto.getApplication().getNavigationHandler();
                //nh.handleNavigation(contexto, null, "sair");                
                try {
                    context.redirect("/lm/index.jsp");
                } catch (IOException ex) {
                    Logger.getLogger(AutorizaListener.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
        }
    }

    @Override
    public void beforePhase(PhaseEvent event) {
    }

    @Override
    public PhaseId getPhaseId() {
        //return PhaseId.RESTORE_VIEW;
        return PhaseId.ANY_PHASE;
    }
}
